package cc.rengu.oltp.service.realize;

import cc.rengu.oltp.service.common.entity.TxnLimitStatis;
import cc.rengu.oltp.service.model.TransLimitInfo;

import java.util.List;

/**
 * 交易限额检查及统计服务（服务调用前先查询所有涉及到的交易限额配置信息）
 * Created by 王成 on 2020/2/6
 */
public interface TransLimitService {
    /**
     * 交易限额检查
     *
     * @param transAmt           交易金额
     * @param transLimitInfoList 交易限额配置信息
     * @return true-交易限额未超限，false-交易限额超限
     * @throws Exception 异常
     */
    boolean transLimitCheck(String transAmt, List<TransLimitInfo> transLimitInfoList) throws Exception;

    /**
     * 更新限额统计信息
     *
     * @param transAmt           交易金额
     * @param transLimitInfoList 交易限额配置信息
     * @return true-交易限额未超限，false-交易限额超限
     * @throws Exception 异常
     */
    boolean transLimitStatis(String transAmt, List<TransLimitInfo> transLimitInfoList) throws Exception;

    /**
     * 获取银行级限额统计信息
     *
     * @param mchntLevel   商户等级
     * @param mchntScope   商户组别
     * @param industryType 行业类别(MCC)
     * @return 银行限额统计信息（包括等级、组别及MCC的日限额及月限额）
     * @throws Exception 异常
     */
    List<TxnLimitStatis> getBankLimitStatisInfo(String mchntLevel, String mchntScope, String industryType) throws Exception;

    /**
     * 获取商户限额统计信息
     *
     * @param mchntNo 商户号
     * @param termNo  终端号
     * @param txnNum  交易码
     * @return 商户限额统计信息（日限额及月限额）
     * @throws Exception 异常
     */
    List<TxnLimitStatis> getMchntLimitStatisInfo(String mchntNo, String termNo, String txnNum) throws Exception;

    /**
     * 获取通道限额统计信息
     *
     * @param channelId 支付通道标识
     * @param txnNum    交易码
     * @return 通道限额统计信息（日限额及月限额）
     * @throws Exception 异常
     */
    List<TxnLimitStatis> getChannelLimitStatisInfo(String channelId, String txnNum) throws Exception;

    /**
     * 获取支付账号限额统计信息
     *
     * @param payAcctNo 支付账号
     * @return 支付账号限额统计信息（日限额及月限额）
     * @throws Exception 异常
     */
    List<TxnLimitStatis> getAcctLimitStatisInfo(String payAcctNo) throws Exception;
}
